java TransformerFactory破坏<html>标记中的<input>和<br>标记
通过简单的代码解析和重写简单的xml,会发生一些奇怪的事情
输入:
<html>
<input></input>
</html>
给出输出(格式不正确):
<html>
<input>
</html>
<;输入/>;,或<;br/>
它不会发生在内部<;html2>;,与其他标签
代码是经典的:
// READ XML
DocumentBuilderFactory builderFactory =DocumentBuilderFactory.newInstance();
builderFactory.setNamespaceAware(true);
DocumentBuilder builder = builderFactory.newDocumentBuilder();
// PARSE
Document document = builder.parse(new InputSource(new StringReader(_xml_source)));
// WRITE XML
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(document), new StreamResult(buffer));
String output = buffer.toString();
这是已知的bug吗强>
# 1 楼答案
XSLT定义了一个output method,它可以是
xml
、html
或text
规范指出,如果根节点是
<html>
,则默认输出方法应该是html
,否则应该是xml
使用
xml
方法,您将得到<input/>
使用
html
方法,您将得到<input>
,,因为HTML specification这样说如果需要,可以显式提供输出方法:
因此,具有
<html>
根节点的文档将输出XML,即<input/>
引号
XSLT output method:
HTML empty tags: